// #include<iostream>
// // #include<vector>
// using namespace std;

// void test01()
// {
//     vector<int> v1; // 整形数组
//     v1.push_back(1);    // 尾插
//     v1.push_back(2);
//     v1.push_back(3);
//     v1.push_back(4);
//     v1.push_back(5);

//     v1.pop_back();      // 尾删

//     v1[1] = 999;
//     for(int i = 0; i < v1.size(); i++)
//         cout << v1[i] << ' ';       // 支持[]访问
//     cout << endl;

//     auto i = v1.begin();
//     while(i != v1.end())
//     {
//         cout << *i << ' ';
//         i++;
//     }
//     cout << endl;

//     for(auto e : v1)
//         cout << e << ' ';
//     cout << endl;
// }

// #include<algorithm>
// void test02()
// {
//     vector<int> v;
//     v.push_back(55);
//     v.push_back(84);
//     v.push_back(5);
//     v.push_back(10);
//     v.push_back(51);
//     sort(v.begin(), v.end(), less<int>());
//     for(auto e : v) cout << e << ' ';
//     cout << endl;
    
//     greater<int> f; //仿函数，让对象可以像函数那样用
//     cout << f(2, 3) << endl;
//     cout << f(3, 2) << endl;

//     sort(v.begin(), v.end(), greater<int>());
//     for(auto e : v) cout << e << ' ';
//     cout << endl;
// }


#include "vector.h"
#include<algorithm>
int main()
{
    Wang::vector<int> v;
    for(int i = 0; i < 20; i++)
        v.push_back(i);
    auto it = find(v.begin(), v.end(), 9);  // 这里可以使用库里面的find是因为库里面对指针类型进行特化
    cout << *it;
    return 0;
}
#include<vector>

#if 0
namespace Wang
{
#if 0
    void test01()
    {
        vector<int> v1;
        for(int i = 0; i < 100; i++) v1.push_back(i);
        for(int i = 0; i < v1.size(); i++)
            cout << v1[i] << ' ';
        cout << endl;

        for(auto e : v1)
            cout << e << ' ';
    }

    void test02()
    {
        // vector<int> v1;
        // v1.push_back(1);
        // v1.push_back(2);
        // v1.push_back(7);
        // v1.push_back(9);
        // // auto it = find(v1.begin(), v1.end(), 10);
        // for(int i = 0; i < 10; i++)
        // {
        //     auto pos = find(v1.begin(), v1.end(), i);
        //     if(pos == v1.end())
        //         v1.push_back(i);
        //     else v1.insert(pos, i);
        // }
        // for(auto e : v1) cout << e << ' ';
        
        vector<int> v2;
        for(int i = 0; i < 100; i++)
            if(find(v2.begin(), v2.end(), i) == v2.end())
                v2.insert(find(v2.begin(), v2.end(), i), i);
        for(auto e : v2) cout << e << ' ';
        cout << endl;
        
        while(!v2.empty())
        {
            v2.erase(v2.begin());
            for(auto e : v2) cout << e << ' ';
            cout << endl;
        }
    }

    void test03()
    {
        vector<int> v1;
        for(int i = 1; i <= 10; i++) v1.push_back(i);

        vector<int> v2 = v1;
        for(int i = 11; i < 30; i++) v2.push_back(i);

        cout << v2.size() << endl;
        cout << v2.capacity() << endl;
        for(auto e : v2) cout << e << " ";
        cout << endl;
    }

    // void test04()
    // {
    //     vector<int> v1;
    //     for(int i = 1; i <= 10; i++) v1.push_back(i);
        
    //     vector<int> v2(5, 9);
    //     v2 = v1;
    //     v1[0] = 22222;

    //     v1.Print();
    //     v2.Print();
    // }

    void test05()
    {
        int a[10] = { 1,2,3,4,9,8,7,6,5 };
        vector<int> v(a + 1, a + 7);
        v.Print();
        vector<int>(5, 10); // 会冲突
    }

    // C++对内置类型进行升级，也有构造
    void test06()
    {
        int i = 0;
        int j(0);
        int k = int();
        int x = int(3);
        cout << i << ' ' << j << ' ' << k << ' ' << x << endl;
    }
#endif
    void test07()
    {
        // vector<string> v(10);
        // vector<string> v1 = {5, "xxx"};
        // vector<int> v2(10, 2);  // 强行重载vector(int n, int x = 0)，否则会走迭代器那个
        // v.Print();
        // v1.Print();
        // v2.Print();

        // C++11
        // 单参数
        // vector<int> a1(10);     // 单参数构造
        // vector<int> a2 = 10;    // 单参数隐式类型转换
        // vector<int> a3 = {10};  // 单参数隐式类型转换
        // vector<int> a4{10};     // 单参数构造，并非隐式类型转换
    }

    void test08()
    {
        // int a[] = {1,2,3,4,5};
        // auto t = {1,2,3,4,5}; // initializer_list<int>
        // vector<int> v = {1,2,3,4,5};    // 隐式类型转换
        // v.Print();

        // vector<int> v1 = {1,2}; // 这里会走initializer_list，不是构造1个2
        // v1.Print();

        // vector<int> v2 = {1};
        // v2.Print();

        // vector<int> v3 = 1; // 单参数隐式类型转换
        // v3.Print();

        vector<int> v4{1,2,3,4,5};    // initializer_list构造
        v4.Print();

        // vector<int> v5 = {1,2,3,4,5};    // 隐式类型转换
        // v5.Print();
    }

    void test09()
    {
        vector<string> v;
        v.push_back("11111111");
        v.push_back("11111111");
        v.push_back("11111111");
        v.push_back("11111111");
        v.push_back("11111111");
        for(int i = 0; i < 10; i++)
            v.push_back("Hello");
        v.Print();
    }
}
// void test01()
// {
//     vector<int> v = {1, 2, 4, 5};
//     v.insert(v.begin() + 2, 1);
//     for(auto e : v) cout << e << ' ';
// }
// void test02()
// {
//     std::vector<int> v = { 1,2,3,4,5 };
//     auto i = find(v.begin(), v.end(), 2);
//     v.erase(i);
//     cout << *i << endl; // g++ 输出3
// }

// void test03()
// {
//     string s = "11111";
//     string s1 = s;
//     printf("%p\n", s.c_str());
//     printf("%p\n", s1.c_str());
// }

namespace Wang
{
    void test10()
    {
        vector<vector<int>> v(10, vector<int>(10, 1));
        for(auto& a : v)
        {
            for(auto& e : a)
                cout << e << ' ';
            cout << endl;
        }
        vector<int> v1;
        for(int i = 1; i < 100; i++)
            v1.push_back(i);
        auto pos = find(v1.begin(), v1.end(), 22);
        v1.insert(pos, 999);
        for(auto e : v1)
            cout << e << ' ';
    }
}
int main()
{
    // Wang::test02();
    Wang::test10(); 
    return 0;
}
#endif